package com.example.helloworld;

import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

import com.example.helloworld.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {

    private ActivityMainBinding mainActivityBinding;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main);
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;
        });
        mainActivityBinding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(mainActivityBinding.getRoot());

        /*
        在Android开发中，Intent 是一个用于在不同组件之间传递消息的对象。它可以用于启动一个Activity、启动一个Service、发送广播等。在这种情况下，我们使用 Intent 来启动另一个Activity。

        当你调用 startActivity() 方法时，你需要传递一个 Intent 对象作为参数，以指示你要启动的Activity是哪一个，并且可以传递额外的数据或者信息给被启动的Activity。

        在上面的代码中，startActivity(new Intent(this, Activity1.class)); 中的 new Intent(this, Activity1.class) 创建了一个新的 Intent 对象。这个Intent的构造函数需要两个参数：第一个参数是一个上下文（Context）对象，第二个参数是你要启动的Activity的类对象。

        在这里，this 表示当前的Activity（即Activity2），因为在Activity类中，它是一个上下文对象（Context）的子类。因此，通过 this 传递了当前的Activity作为上下文，告诉系统我们是从当前Activity启动另一个Activity的。
         */
        mainActivityBinding.startOtherActivity.setOnClickListener(v -> {
            Intent intent = new Intent(this, OtherActivity.class);
            this.startActivity(intent);
        });
        mainActivityBinding.startService.setOnClickListener(v->{
            Intent intent = new Intent(this,ServiceStart.class);
            this.startService(intent);
        });
        mainActivityBinding.bindService.setOnClickListener(v->{
            Intent intent = new Intent(this,ServiceBind.class);
            bindService(intent,conn, Context.BIND_AUTO_CREATE);
        });
        mainActivityBinding.stopActivity.setOnClickListener(v->{
            this.finish();
        });

    }

    private ServiceConnection conn = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            System.out.println("MainActivity: onServiceConnected");
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            System.out.println("MainActivity: onServiceDisconnected");
        }
    };


    @Override
    protected void onStart() {
        super.onStart();
        System.out.println("Main activity onStart");
    }

    @Override
    protected void onResume() {
        super.onResume();
        System.out.println("Main activity onResume");
    }

    @Override
    protected void onPause() {
        super.onPause();
        System.out.println("Main activity onPause");
    }

    @Override
    protected void onStop() {
        super.onStop();
        System.out.println("Main activity onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        System.out.println("Main activity onStop");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        System.out.println("Main activity onRestart");
    }
}